using System;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Security.Services;
using System.Collections.Generic;
using Sinacor.Infra.Common;

namespace Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Translator.DataContractToModel
{
    /// <summary>
    /// Traduz um contrato de dados em um modelo
    /// </summary>
    public class Operador
    {

		public Operador(){}

		/// <summary>
        /// ToOperador
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
		public Model.Operador ToOperador(Communication.Bovespa.ManutencaoOrdens.Operador.OperadorResponse from)
        {
            Model.Operador retorno = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Operador();

            if (from == null)
                return null;

            if(from.Bloqueado.HasValue)
            retorno.Bloqueado = from.Bloqueado.Value;

            if (from.CodigoOperador.HasValue)
            retorno.CodigoOperador = from.CodigoOperador.Value;

            if (from.CodigoOperadorMegaBolsa.HasValue)
            retorno.CodigoOperadorMegaBolsa = from.CodigoOperadorMegaBolsa.Value;

            retorno.CodigoOperadorRendaFixa = from.CodigoOperadorRendaFixa;

            if (from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa.HasValue)
            retorno.IndicadorDesprezaOperadorSinalOfertasMegaBolsa = from.IndicadorDesprezaOperadorSinalOfertasMegaBolsa.Value;

            if (from.IndicadorOperadorHomeBroker.HasValue)
            retorno.IndicadorOperadorHomeBroker = from.IndicadorOperadorHomeBroker.Value;

            if (from.IndicadorPontaMesa.HasValue)
            retorno.IndicadorPontaMesa = from.IndicadorPontaMesa.Value;

            retorno.LoginOperador = from.LoginOperador;

            retorno.NomeOperador = from.NomeOperador;
                        
            retorno.Subordinado = from.Subordinado;            

            return retorno;
		}

		/// <summary>
        /// ToOperador - LIST
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
        public ModelCollection<Model.Operador> ToOperador(List<Communication.Bovespa.ManutencaoOrdens.Operador.OperadorResponse> from)
        {
            ModelCollection<Model.Operador> lista = new ModelCollection<Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Operador>();
            Model.Operador item = null;

            if (from == null)
                return null;

            foreach (Communication.Bovespa.ManutencaoOrdens.Operador.OperadorResponse inLista in from)
            {
                item = this.ToOperador(inLista);
                lista.Add(item);
            }

            return lista;
		}

		/// <summary>
        /// ToPreferencias
		/// </summary>
		/// <param name="from"></param>
		/// <returns></returns>
        public Model.Preferencias ToPreferencias(Communication.Bovespa.ManutencaoOrdens.Operador.PreferenciasResponse from)
        {
            Model.Preferencias retorno = new Sinacor.UI.Bovespa.ManutencaoOrdens.Model.Preferencias();

            if (from == null)
                return null;

            retorno.Bolsa = from.Bolsa;
            retorno.CodigoOperador = from.CodigoOperador;

            switch (from.Mercado.Value)
            {
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.Vista:
                    retorno.Mercado = Model.Enum.TipoMercado.Vista;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.OpcaoCompra:
                    retorno.Mercado = Model.Enum.TipoMercado.OpcaoCompra;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.OpcaoVenda:
                    retorno.Mercado = Model.Enum.TipoMercado.OpcaoVenda;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.ExercicioOpcaoCompra:
                    retorno.Mercado = Model.Enum.TipoMercado.ExercicioOpcaoCompra;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.ExercicioOpcaoVenda:
                    retorno.Mercado = Model.Enum.TipoMercado.ExercicioOpcaoVenda;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.Fracionario:
                    retorno.Mercado = Model.Enum.TipoMercado.Fracionario;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.Estruturado:
                    retorno.Mercado = Model.Enum.TipoMercado.Estruturado;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.Leilao:
                    retorno.Mercado = Model.Enum.TipoMercado.Leilao;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.Termo:
                    retorno.Mercado = Model.Enum.TipoMercado.Termo;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.LeilaoNaoCotados:
                    retorno.Mercado = Model.Enum.TipoMercado.LeilaoNaoCotados;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.Futuro:
                    retorno.Mercado = Model.Enum.TipoMercado.Futuro;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.VencimentoFuturo:
                    retorno.Mercado = Model.Enum.TipoMercado.VencimentoFuturo;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.BOX:
                    retorno.Mercado = Model.Enum.TipoMercado.BOX;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.IntegralizacaoResgateCotas:
                    retorno.Mercado = Model.Enum.TipoMercado.IntegralizacaoResgateCotas;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoMercado.CotasETF:
                    retorno.Mercado = Model.Enum.TipoMercado.CotasETF;
                    break;                
            }

            switch (from.Ordem.Value)
            {
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoOrdem.Mercado:
                    retorno.Ordem = Model.Enum.TipoOrdem.Mercado;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoOrdem.Casada:
                    retorno.Ordem = Model.Enum.TipoOrdem.Casada;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoOrdem.Administrada:
                    retorno.Ordem = Model.Enum.TipoOrdem.Administrada;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoOrdem.Limitada:
                    retorno.Ordem = Model.Enum.TipoOrdem.Limitada;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoOrdem.Financiamento:
                    retorno.Ordem = Model.Enum.TipoOrdem.Financiamento;
                    break;
                case Sinacor.UI.Bovespa.ManutencaoOrdens.Communication.Bovespa.ManutencaoOrdens.Operador.TipoOrdem.OnStop:
                    retorno.Ordem = Model.Enum.TipoOrdem.OnStop;
                    break;             
            }

            retorno.OrdemModoInsert = from.OrdemModoInsert;
            retorno.OrdenaDigitacaoDecrescente = from.OrdenaDigitacaoDecrescente;
            retorno.PopulaLoteAutomaticamenteAposInsercao = from.PopulaLoteAutomaticamenteAposInsercao;
            retorno.PopulaLoteAutomaticamenteAposPreBoleto = from.PopulaLoteAutomaticamenteAposPreBoleto;
            retorno.UtilizaDataPreBoleto = from.UtilizaDataPreBoleto;

            return retorno;
		}

	}
}